#ifndef FEAELEMENT_HPP
#define FEAELEMENT_HPP

/* ========================================================
 * Pure virtual base class that defines the interface for 
 * element routines.
 * All specific element routine needs to implement the 
 * following routines.
 *
 * Author: Ju Liu, Sept 29th 2011
 * ======================================================*/

class FEAElement
{
  public:
    FEAElement();
    ~FEAElement();
    
    virtual int dimension() const = 0;
    
    // number of integration points in each direction
    virtual int numIntPts_xi() const = 0;
    virtual int numIntPts_eta() const = 0;
    virtual int numIntPts_zeta() const = 0;

    // element index and IEN information
    virtual void gIndex(int index);
    virtual int gIndex() const;
    static int maxIndex(){return mMaxIndex;}


    vector<int> Local2Global;
    virtual void IENsetup() = 0;



};

#endif
